# レッスン 3: 高解像度メッシュをラップしてアニメーション時にズボンをシミュレートする

このレッスンでは、以下の操作を行います。

- 高解像度メッシュ(Pants_HighRes)の動作に影響するラップ デフォーマを作成します。
- ジオメトリ キャッシュを読み込んで胴体(nRigid_Body)と靴(nRigid_Shoes)のメッシュをアニメートします。
- シミュレートされた nCloth ズボン オブジェクトに対して nCache を作成します。
- nCloth とパッシブ衝突オブジェクト間の不正確な衝突検出や nCloth 内の自己衝突が原因となって引き起こされる、不完全に変形されたポリゴンや相互貫通などのシミュレーションの問題領域を特定します。
- nucleus ソルバのサブステップ(Substeps)を編集し、シミュレーション全体の精度を改善します。
- キーフレームを設定し、シミュレーションで問題になる特定のフレームでサブステップ(Substeps)値を増やします。
- 相互貫通を解決します。

## レッスンのセットアップ

説明どおりにレッスンを進めるために、レッスンを開始する前に次の手順を実行します。

1. nCloth の高度なテクニックのレッスン データをダウンロードしていない場合は、http://www.autodesk.co.jp/maya-advancedtechniques からダウンロードします。その後、nClothAdvancedTutorials ディレクトリを Maya プロジェクトとして設定します。

   このレッスンでは、レッスンのシーン ファイルに加えて、Maya ジオメトリのキャッシュ ファイルにアクセスする必要があります。

2. Character_LowRes_3.mb という名前のシーン ファイルを開きます。

   このファイルは、Maya プロジェクトとして設定した nClothAdvancedTutorials ディレクトリ内にあります。

## 高解像度メッシュをラップする

このレッスンでは、ラップ デフォーマを使用してシミュレートされた低解像度メッシュのように高解像度メッシュを動作させるインフルエンス オブジェクトを作成します。ラップ デフォーマの詳細については、Maya ヘルプの「ラップ デフォーマ」を参照してください。

高解像度メッシュをラップするには

1. アウトライナ(Outliner)で Character_HighRes を展開し、Pants_HighRes オブジェクトを選択してからディスプレイ > 表示 > 選択項目の表示(Display > Show > Show Selection)を選択することによって、このオブジェクトを表示します。
2. Ctrl キーを押しながら nCloth ズボン(Character_LowRes>Pants_LowRes)を選択します。
3. アニメーション(Animation)メニュー セットから、アニメーション デフォーム > フル デフォーム メニューを開く(Anim Deform > Open Full Deform Menu)を選択します。
4. 表示される デフォーム(Deform)メニューから、ラップ(Wrap)を選択します。

   アトリビュート エディタ(Attribute Editor)にラップ ノードが表示され、アウトライナ(Outliner)ではPants_LowResBase オブジェクトが Character_LowRes グループに追加されるのを確認できます。

   注:

   必要に応じて Character_LowRes を展開し、アウトライナ(Outliner)で Pant_LowResBase オブジェクトを確認してください。

5. アトリビュート エディタ(Attribute Editor)で、wrap1 タブをクリックします。
6. ラップ アトリビュート(Wrap Attributes)セクションで、排他バインド(Exclusive Bind)をオンにします。

   排他バインド(Exclusive Bind)をオンにすると、Pants_HighRes オブジェクト上の各サーフェス ポイント(頂点)が Pants_LowRes オブジェクトの頂点によってコンストレイントされるか作用されます。これにより、Pants_HighRes オブジェクトはシミュレートされる nCloth ズボンのプロパティを確実に継承します。

7. アウトライナ(Outliner)で Pants_LowRes オブジェクトを選択し、ディスプレイ > 非表示 > 選択項目の非表示(Display > Hide > Hide Selection)を選択して、Pants_LowRes オブジェクトを非表示にします。
8. シミュレーションを再生します。

シミュレーションを再生すると、次のことがわかります。

- Pants_HighRes オブジェクトがまるで nCloth オブジェクトをシミュレートしているかのように見えます。
- 解像度のスピードが遅くなったり Pants_HighRes オブジェクトに作用されることはありません。

ポリゴン数の多い Pants_HighRes オブジェクトでは、シミュレーション速度は遅くなると思われるかもしれません。ところが、実際には速度が遅くなることはありません。これは nucleus ソルバが Pants_HighRes オブジェクトに接続されたデータをシミュレートしないためです。シミュレーションに含まれる nucleus 計算はすべて、引き続き低解像度の nCloth ズボン上で実行されます。Pants_HighRes オブジェクトの動作は、シミュレートされる nCloth の新しいインスタンスである Pants_LowResBase オブジェクトの影響を受けます。

Pants_LowResBase オブジェクトは Pants_HighRes オブジェクトのデフォメーションに対するベースのシェイプで、これがラップ インフルエンス オブジェクトです。すべてのラップ デフォーマと同様に、ベースのシェイプとラップ インフルエンス オブジェクト間の位置、方向、またはシェイプの差に基づいて、ラップ デフォーマによるインフルエンスを受けているサーフェスが変形します。

## アニメートされたキャラクタの nCloth ズボンをシミュレートする

このセクションでは、nRigid の胴体オブジェクトと nRigid の靴オブジェクトに対するジオメトリ キャッシュを読み込み、胴体と靴をアニメートしながら nCloth ズボン オブジェクトのシミュレートを開始します。

### レッスンのセットアップ

このセクションを説明どおりに進めるために、レッスンを開始する前に次の手順を実行します。

1. アウトライナ(Outliner)で Pants_HighRes オブジェクトを選択し、ディスプレイ > 非表示 > 選択項目の非表示(Display > Hide > Hide Selection)を選択して、Pants_HighRes オブジェクトを非表示にします。
2. アウトライナ(Outliner)で Pants_LowRes オブジェクトを選択して表示し、それからディスプレイ > 表示 > 選択項目の表示(Display > Show > Show Selection)を選択します。
3. nClothAdvancedTutorials ディレクトリを Maya プロジェクトとして設定していない場合は、設定します。

#### ジオメトリ キャッシュを読み込むする

アニメートされたキャラクタ上で nCloth ズボンをシミュレートする前に、キャラクタの胴体と靴をアニメートするジオメトリ キャッシュを読み込むする必要があります。

ジオメトリ キャッシュを読み込んで胴体と靴のメッシュをアニメートするには

1. シーン ビューで Body オブジェクトを選択します。
2. メイン メニュー セットから、キャッシュ > ジオメトリ キャッシュ > キャッシュの読み込み(Cache > Geometry Cache > Import Cache)を選択します。
3. 表示されるキャッシュ ファイルの読み込み(Import Cache File)ウィンドウで、以下を行います。
   - ファイルの種類(Files of type)リストからすべてのファイル(All Files)を選択します。
   - nClothAdvancedTutorials ¥data フォルダを参照して Body_Animation.mcを選択します。
   - 開く(Open)をクリックします。
4. シーン ビューで、Shoes オブジェクトを選択し、手順 2 と 3 の説明に従って作業を進めます。キャッシュ ファイルのリストから Body_Animation.mc に代わって Shoes_Animation.mc を選択します。

シミュレーションを再生し、アニメートされたキャラクタと一緒にシミュレートされたときの nCloth ズボンの動作を確認できます。ただし、タイム スライダ(Time Slider)をスクラブできないとシミュレーションを詳細に検査することは困難です。シミュレーションの問題をより簡単に特定するには、nCloth ズボン オブジェクトのキャッシュを作成します。nCache の詳細については、Maya ヘルプの「nCaching」を参照してください。

nCloth ズボンのシミュレーションをキャッシュするには

1. シーン ビューで、nCloth ズボンを選択します。
2. nCache > 新規キャッシュの作成 > nObject (nCache > Create New Cache > nObject) > を選択します。

   nCache の作成オプション(Create nCache Options)ウィンドウが表示されます。

3. nCache の作成オプション(Create nCache Options)ウィンドウで、以下を実行します。
   - キャッシュを保存するフォルダにキャッシュ ディレクトリ(Cache Directory)を設定します。
   - キャッシュ名(Cache Name)に nCloth_PantsShape を設定します。
   - ファイル配分(File distribution)の項目にある 1 ファイル(One File)を選択します。
   - 作成(Create)ボタンをクリックします。
4. シミュレーションを再生します。

## シミュレートされた nCloth で問題領域を特定する

シミュレーションを再生すると、nCloth ズボン オブジェクトに次の問題があることがわかります。

- フレーム 1025 と 1035 の間で、ウエストとズボンの股部分の周囲のポリゴン フェースに質の悪い自己衝突が表示されており、結果として相互貫通が発生しています。また、膝の前と後のポリゴン フェースは質が悪く、一部のポリゴンが外方向に突き出して、クロスが重く固そうに見えます。
- フレーム 1037 では、足首周りのポリゴン フェースは互いに折り重なり、トラップされています。
- フレーム 1040 と 1045 の間では、ズボンのウエスト、膝、裾の折り返しにまだ自己衝突の問題が残っています。

タイム スライダ(Time Slider)をスクラブしながらシーンをドリー、タンブルし、各問題領域に接近して観察できるようにします。

### サブステップ(Substeps)を編集する

シミュレーションの問題の修正に役立つ最初の手順は、nucleus ソルバのサブステップ(Substeps)と衝突最大反復回数(Max Collision Iterations)の数を増やすことです。サブステップ(Substeps)は、nCloth とパッシブ衝突オブジェクト間の衝突の検出からダイナミック プロパティ(Dynamic Properties)アトリビュートとダイナミック コンストレイントのエフェクトまで、Maya Nucleus ソルバがシミュレーションに含まれるすべてを計算するフレームごとの回数を指定します。サブステップ(Substeps)を調整すれば、シミュレーション時間をどのように分割して計算セグメントにするかをコントロールできます。一般的にはシミュレーション精度と衝突精度は、サブステップ(Substeps)値を増やすと向上します。衝突最大反復回数(Max Collision Iterations)は、Maya Nucleus ソルバのフレームごとの衝突反復の最大回数を指定します。サブステップ(Substeps)または衝突最大反復回数(Max Collision Iterations)が多いと、ソルバが遅くなる可能性があります。

シーンの複雑さによっては、重力と風のみが nCloth オブジェクトに作用する静止シーンをシミュレートする場合には、既定値であるサブステップ(Substeps)を 3、衝突最大反復回数(Max Collision Iterations)を 4 に設定するとうまくいくこともあります。nCloth が移動し始めて自己衝突する場合は、特に高速に移動するオブジェクトで衝突を正確に検出できるように、サブステップ(Substeps)値を大きくする必要があります。nCloth 衝突の数が増加した場合や、ダイナミック コンストレイントがオブジェクトに追加された場合には、衝突最大反復回数(Max Collision Iterations)を増やすことが重要になります。詳細については、Maya ヘルプの「nCloth ダイナミック プロパティ」を参照してください。

サブステップ(Substeps)と衝突最大反復回数(Max Collision Iterations)を編集するには

1. アトリビュート エディタ(Attribute Editor)で、nucleus1 タブを選択します。
2. ソルバ アトリビュート(Solver Attributes)セクションで、以下を実行します。
   - サブステップ(Substeps)を 7 に設定します。
   - 衝突最大反復回数(Max Collision Iterations)を 8 に設定します。
3. シミュレーションを再生してこの新しい設定の結果を確認する前に、シミュレーションの前の nCache を置き換えるか、新規 nCache を作成する必要があります。そうしないと、変更内容がシミュレーションに表示されません。

   キャッシュ ファイルを置き換えると、既存の nCache は新規ファイルで上書きされます。レッスンではシミュレーションを何度もキャッシュするため、キャッシュの置き換え(Replace Cache)を使用してハード ディスクに保存されるキャッシュ ファイルの数を少なくするのが最適です。前の nCache を置き換えるには、nCache > Cache の置き換え > nObject(nCache > Replace Cache > nObject)を選択します。

4. キャッシュの作成の警告(Create Cache Warning)が表示されたら、既存の置き換え(Replace Existing)をクリックします。
5. シミュレーションを再生します。

シミュレーションを再生すると、フレーム 1030 以降で、ひざの領域のポリゴン フェースがよりリアルになっているのがわかります。クロスのデフォメーションがより多くのフェース上に広がり、よりリアルに見えるようになりました。ただし、シミュレーションの問題がすべて解決されたわけではありません。サブステップ(Substeps)と衝突最大反復回数(Max Collision Iterations)により大きい値を設定する必要がある場合もあります。

サブステップ(Substeps)と衝突最大反復回数(Max Collision Iterations)を増やすと、nucleus ソルバはシミュレートされる各ステップでより多くの計算を実行することになるため、結果としてシミュレーション速度が遅くなります。シミュレーションの精度とパフォーマンスのバランスをとるには、シミュレーションでより高いサブステップ(Substeps)と衝突最大反復回数(Max Collision Iterations)が必要な領域やフレームを特定しておくと役に立ちます。キーフレームを設定して、シミュレーションの存続中にサブステップ(Substeps)と衝突最大反復回数(Max Collision Iterations)の値をアニメートできます。

サブステップ(Substeps)と衝突最大反復回数(Max Collision Iterations)にキーフレームを設定するには

1. タイム スライダ(Time Slider)で、フレーム 1000 に進みます。
2. アトリビュート エディタ(Attribute Editor)で、nucleus1 タブを選択します。
3. ソルバ アトリビュート(Solver Attributes)セクションで、以下を実行します。
   - サブステップ(Substeps)を 5 に設定します。
   - サブステップ(Substeps)アトリビュート フィールドを右クリックして、ポップアップ メニューからキーの設定(Set Key)を選択します。
   - 衝突最大反復回数(Max Collision Iterations)を 6 に設定します。
   - 衝突最大反復回数(Max Collision Iterations)アトリビュート フィールドを右クリックして、ポップアップ メニューからキーの設定(Set Key)を選択します。
4. 次の表の値を使用して、シミュレーションでのキーフレームの設定を続けます。

   フレーム | サブステップ(Substeps) | 衝突最大反復回数(Max Collision Iterations)
   --- | --- | ---
   1019 | 5 | 6
   1020 | 7 | 8
   1022 | 9 | 12
   1025 | 15 | 20
   1060 | 9 | 12

5. シミュレーションをキャッシュ(nCache > キャッシュの置き換え > nObject(nCache > Replace Cache > nObject))してから再生します。

### nCloth アトリビュートを微調整する

キャッシュを再生すると、シミュレーションの全体的な精度が改良されていることがわかります。ただし、ウエストと股部分にまだ問題領域があります。たとえば、フレーム 1030 では、股領域の質の悪い自己衝突の結果、望ましくないポリゴン デフォメーションが作成されています。シミュレーションの精度を向上させるために、ダイナミック プロパティ(Dynamic Properties)アトリビュートの微調整を開始します。

ダイナミック プロパティ(Dynamic Properties) アトリビュートなどの nCloth アトリビュートを細かく調整する場合は、シミュレーションのさまざまなフレームで nCloth メッシュの複製を作成しておくと役立ちます。シミュレーションを再生するときに、現在シミュレート中の nCloth を複製メッシュと比較して、次の項目について評価できます。

- 調整が必要なアトリビュートを正しく特定しているか。
- 調整は nCloth の動作にどのように作用するか。

股領域の問題を解決するには、ベンドの抵抗(Bend Resistance)を大きくしてポリゴンのエッジの形状が適切になるようにします。詳細については、Maya ヘルプの「nCloth ダイナミック プロパティ」を参照してください。

複製メッシュを作成してベンドの抵抗を編集するには

1. タイム スライダ(Time Slider)で、フレーム 1030 に進みます。
2. シーン ビューで、nCloth ズボンを選択して編集 > 複製(Edit > Duplicate)を選択します。
3. アウトライナ(Outliner)で Pants_LowRes1 を選択し、シーン ビューでメッシュ オブジェクトをキャラクタの右に移動します。
4. シーン ビューでオリジナルの nCloth ズボン オブジェクトを選択し、アトリビュート エディタ(Attribute Editor)で nCloth_PantsShape タブをクリックします。
5. ダイナミック プロパティ(Dynamics Properties)セクションで、ベンドの抵抗(Bend Resistance)を 5 に設定します。
6. シミュレーションをキャッシュして(nCache > キャッシュの置き換え > nObject(nCache > Replace Cache > nObject))、再生します。

シミュレーションを再生すると、股領域のクロスがよりリアルにカーブしているのがわかります。タイム スライダ(Time Slider)でフレーム 1030 に進み、シミュレートされた nCloth を複製メッシュと比較します。シーンをドリー、タンブルし、改良された領域に接近して観察できるようにします。

#### 精度設定を編集して相互貫通を解決する

シミュレーションを再生して問題領域を複製メッシュと比較すると、フレーム 1030 と 1035 の間にまだ問題領域が残っていることがわかります。

シミュレーション精度を向上させるもう 1 つの方法として、自己衝突フラグ(Self Collision Flag)と精度設定(Quality Settings)アトリビュートの編集があります。これは nCloth コンポーネントの衝突と自己衝突に作用します。既定では、自己衝突フラグ(Self Collision Flag)は頂点フェース(VertexFace)に設定されています。つまり nCloth オブジェクトの頂点とフェースが互いに衝突します。自己衝突フラグ(Self Collision Flag)を完全なサーフェス(Full Surface)に設定すると、すべてのオブジェクト コンポーネント(頂点、エッジ、フェース)が自己衝突の対象として設定されます。

低解像度メッシュをシミュレートする場合は、メッシュの頂点、エッジ、およびフェースの数が少ないため、nCloth オブジェクトの潜在的な自己衝突領域の数を増やすことが重要です。高解像度の nCloth メッシュで自己衝突フラグ(Self Collision Flag)を完全なサーフェス(Full Surface)に設定すると、シミュレーション時間が長くなります。この問題は低解像度メッシュでは軽減されるため、反復シミュレーション テストではこの代替が非常に有用です。詳細については、Maya ヘルプの「nCloth 衝突アトリビュート」を参照してください。

自己衝突フラグ(Self Collision Flag) アトリビュートを編集するには

1. タイム スライダ(Time Slider)で、フレーム 1033 に進みます。
2. シーン ビューで、nCloth ズボンを選択して編集 > 複製(Edit > Duplicate)を選択します。
3. アウトライナ(Outliner)で Pants_LowRes2 を選択し、シーン ビューでメッシュ オブジェクトをキャラクタの左に移動します。
4. シーン ビューでオリジナルの nCloth ズボン オブジェクトを選択し、アトリビュート エディタ(Attribute Editor)で nCloth_PantsShape タブをクリックします。
5. 衝突(Collisions)セクションで、自己衝突フラグ(Self Collision Flag)を完全なサーフェス(Full Surface)に設定します。

自己衝突フラグ(Self Collision Flag)アトリビュートを完全なサーフェス(Full Surface）に設定すると、自己衝突が改善されますが、トラップされた自己衝突頂点を作成することがあります。精度設定(Quality Settings) を編集してこの問題を解決したり、nCloth ズボン オブジェクトと nRigid 靴オブジェクト間の残った相互貫通を解決することができます。また、厚み(Thickness)を増やすか、厚みマップ(Thickness Map)を作成して衝突検出を改良することもできます。

精度設定(Quality Settings)を編集するには

1. アトリビュート エディタ(Attribute Editor)で、nCloth_PantsShape タブを選択します。
2. 精度設定(Quality Settings)セクションで、次の操作を実行します。
   - 最大反復回数(Max Iterations)が 10000 に設定されていることを確認します。
   - トラップ チェック(Trapped Check)をオンにします。
   - 自己トラップのチェック(Self Trapped Check)をオンにします。
3. nCache > キャッシュの置き換え > nObject(nCache > Replace Cache > nObject)でシミュレーションをキャッシュして、再生します。

タイム スライダ(Time Slider)で、フレーム 1033 に進み、シミュレートされた nCloth を複製メッシュと比較します。タイムラインをスクラブしながらシーンをドリー、タンブルし、問題領域に接近して観察できるようにします。満足な結果が得られたら、Pants_LowRes1 と Pants_LowRes2 の複製メッシュを削除します。

### ラップされた nCloth シミュレーションをシミュレートされた高解像度メッシュと比較する

nCloth ズボン オブジェクトのアトリビュート調整を完了するには、ラップされた nCloth シミュレーションをリファレンス キャラクタ オブジェクト(オリジナルのシミュレートされた高解像度メッシュ)と比較します。

低解像度と高解像度の nCloth メッシュを比較するには

1. アウトライナ(Outliner)で Pants_LowRes オブジェクトを選択して非表示にし、それからディスプレイ > 非表示 > 選択項目の非表示(Display > Hide > Hide Selection)を選択します。
2. アウトライナ(Outliner)で Pants_HighRes オブジェクトを選択してこれを表示し、それからディスプレイ > 表示 > 選択項目の表示(Display > Show > Show Selection)を選択します。
3. ディスプレイ レイヤ エディタ(Display Layer Editor) (チャネル ボックス(Channel Box)/レイヤ エディタ(Layer Editor) > ディスプレイ(Display)タブ > レイヤ(Layers) > 選択したレイヤを設定(Set Selected Layers))で、可視(Visible)をオンにしてシーン ビューに Reference_Character オブジェクトを表示します。
4. アウトライナ(Outliner)で Reference_Shirt オブジェクトを選択して非表示にし、それからディスプレイ > 非表示 > 選択項目の非表示(Display > Hide > Hide Selection)を選択します。
5. シェーディング(Shading)メニューで、ワイヤフレーム付きシェード(Wireframe on Shaded)をオンにします。
6. タイム スライダ(Time Slider)をスクラブして、アニメーションでの nCloth メッシュの動作を比較します。タイムラインをスクラブしながらシーンをドリーおよびタンブルし、問題領域に接近して観察できるようにします。
   注:

   シミュレーションを再生またはスクラブしたときにシーン ビューで Reference_Character がアニメートされない場合は、必要に応じてリファレンス キャラクタのキャッシュをその個々のオブジェクトに再接続してください。詳細については、既存のキャッシュにオブジェクトを再接続するを参照してください。

#### 既存のキャッシュにオブジェクトを再接続する

1. アウトライナ(Outliner)で、キャッシュを再接続するオブジェクトを選択します。
2. アトリビュート エディタ(Attribute Editor)で、オブジェクトのキャッシュ ノードを選択します。

   たとえば、キャラクタの胴体のキャッシュを再接続する場合は、Body_AnimationCache1 タブを選択します。

3. キャッシュ ファイル(Cache File)セクションで アイコンをクリックして、ベース ディレクトリ(Base Directory)が nClothAdvancedTutorials プロジェクトの data フォルダに設定されていることを確認します。
4. キャッシュ ディレクトリの割り当て(Assign Cache Directory)ウィンドウの開く(Open)をクリックします。

観察

シミュレーションを再生またはスクラブすると、次のことを確認できます。

- 全体的に見て、ラップされた nCloth ズボンとリファレンス キャラクタ オブジェクトは同じように動作します。
- フレーム 1040 と 1047 の間では、nCloth ズボン オブジェクトのズボンの脚は、リファレンス キャラクタ オブジェクトのズボンの脚より少し速く落ちていきます。

ヒント: nCloth ズボンの脚をリファレンス キャラクタ オブジェクトのズボンの脚と同じ方法でシミュレートするには、摩擦(Friction)アトリビュートを調整します。